const express = require('express');
const cors = require('cors');
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
const path = require('path');
const db = require('./db');
require('dotenv').config();

const app = express();
const port = process.env.PORT || 3001;

// 配置CORS
app.use(cors({
  origin: process.env.NODE_ENV === 'production' ? false : 'http://localhost:3000',
  credentials: true
}));

app.use(express.json());

// 在生产环境中提供静态文件
if (process.env.NODE_ENV === 'production') {
  app.use(express.static(path.join(__dirname, '../frontend/build')));
}

// 中间件：验证JWT token
const authenticateToken = (req, res, next) => {
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(' ')[1];

  if (!token) {
    return res.status(401).json({ error: '未提供认证token' });
  }

  jwt.verify(token, process.env.JWT_SECRET, (err, user) => {
    if (err) {
      return res.status(403).json({ error: 'token无效' });
    }
    req.user = user;
    next();
  });
};

// 登录路由
app.post('/api/login', async (req, res) => {
  const { username, password } = req.body;

  if (username === process.env.ADMIN_USERNAME && 
      password === process.env.ADMIN_PASSWORD) {
    const token = jwt.sign({ username }, process.env.JWT_SECRET, { expiresIn: '24h' });
    res.json({ token });
  } else {
    res.status(401).json({ error: '用户名或密码错误' });
  }
});

// 获取AI记录
app.get('/api/ai-records', authenticateToken, async (req, res) => {
  try {
    const result = await db.query('SELECT * FROM public.ai_records LIMIT 1000');
    res.json(result.rows);
  } catch (err) {
    console.error('AI记录查询错误:', err);
    res.status(500).json({ error: err.message });
  }
});

// 获取购买记录
app.get('/api/purchases', authenticateToken, async (req, res) => {
  try {
    const result = await db.query('SELECT * FROM public.purchase LIMIT 1000');
    res.json(result.rows);
  } catch (err) {
    console.error('购买记录查询错误:', err);
    res.status(500).json({ error: err.message });
  }
});

// 获取数据库表和视图列表
app.get('/api/db-info', authenticateToken, async (req, res) => {
  try {
    // 查询所有表和视图
    const tablesResult = await db.query(`
      SELECT table_name, table_type
      FROM information_schema.tables 
      WHERE table_schema = 'public'
      ORDER BY table_name
    `);
    
    // 查询所有视图
    const viewsResult = await db.query(`
      SELECT table_name
      FROM information_schema.views
      WHERE table_schema = 'public'
      ORDER BY table_name
    `);
    
    res.json({
      tables: tablesResult.rows,
      views: viewsResult.rows
    });
  } catch (err) {
    console.error('数据库查询错误:', err);
    res.status(500).json({ error: err.message });
  }
});

// 在所有API路由之后添加
if (process.env.NODE_ENV === 'production') {
  app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, '../frontend/build', 'index.html'));
  });
}

app.listen(port, () => {
  console.log(`服务器运行在端口 ${port}`);
}); 